A heterogeneous, multiprocessor framework provides a standard that is cross-platform and supports parallel programming of modern processors, servers, handheld/embedded devices, and the like. Open Computing Language, referred to as “OpenCL,” is an example of a heterogeneous, multiprocessor framework for writing programs that may be executed across heterogeneous computing platforms. A heterogeneous computing platform may include a central processing unit (CPU), a graphics processing unit (GPU), a digital signal processor (DSP), or the like.
A heterogeneous, multiprocessor program, e.g., an OpenCL program, includes a portion that executes on a host system and one or more other portions that execute on devices. Typically, the host system includes the CPU while the devices may be implemented as GPUs, DSPs, etc. The portions that execute on devices, which may be referred to as kernels, may be coded in OpenCL, OpenCL C, or another high level programming language adapted to the heterogeneous, multiprocessor framework or OpenCL. The portion that executes on the host may be programmed in C or C++, for example, and controls the heterogeneous, multiprocessor environment across the various devices.
While the environment described above is heterogeneous in nature, each specific device, whether a DSP or a GPU, has a static architecture. By comparison, a programmable IC such as a field programmable gate array (FPGA) has an extremely flexible hardware architecture that may be used for purposes of hardware acceleration. In order to utilize a programmable IC as a device, however, the circuitry implemented within the programmable IC must be able to interact with the host and operate within the context of the heterogeneous, multiprocessor environment.